package it.ap.sa.core.dao.util.type;

/**
 * @author Alessandro Paolillo
 */
public class CoreTypes {

	/**
	 * @author Alessandro Paolillo
	 */
	public enum FormBuilderFieldType {
		
		STRING("String"), NUMBER("Number"), DATE("Date"), ARRAY("Array");
		
		private String value;

		private FormBuilderFieldType(String value) {
			this.value = value;
		}

		public String getValue() {
			return value;
		}

		/**
		 * Dato il type del campo del form builder, ritorna il tipo corretto da
		 * noi gestito fra quelli censiti in {@link FormBuilderFieldType}
		 * 
		 * @param {@link Object} fieldType - type del dato generato dal form builder
		 * @return {@link String} - type del dato da noi gestito
		 */
		public static String getRealFieldType(Object type, Object fieldType) {

			if (null == type || type.equals("checkbox")) {
				return STRING.getValue();
			} 
			else 
				if (type.equals("array")) {
					return ARRAY.getValue();
				} 
			else 
				if (type.equals("integer") || type.equals("number")) {
					return NUMBER.getValue();
				} 
			else 
				if (type.equals("string")) {
					/**
					 * Nel caso di una stringa, potrebbe trattarsi anche di un campo
					 * di tipo date o datetime
					 */
					if (fieldType.equals("date") || fieldType.equals("datetime")) {
						return DATE.getValue();
					}
				} 
			else
			   throw new IllegalArgumentException("Type : " + type + " non gestito.");

			return STRING.getValue();
		}
	}
	
	/**
	 * @author Alessandro Paolillo
	 */
	public static enum LanguageCode {
		IT("IT"), EN("EN");
		
		private String value;
		private String name;

		private LanguageCode(String value) {
			this.value = value;
		}

		public String getValue() {
			return value;
		}

		public String getName() {
			return name;
		}
	}
	
	/**
	 * Tipo di percorrenza con la quale discriminiamo gli archi/way (CAR, FOOT, BIKE).
	 */
	public static enum WalkingGraphType{
	
		CAR((short)0),
		BIKE((short)1),
		FOOT((short)2);
		
		private final short value;

		WalkingGraphType(short v) {
	        value = v;
	    }

	    public short value() {
	        return value;
	    }

	    public static WalkingGraphType fromValue(short v) {
	        for (WalkingGraphType item: WalkingGraphType.values()) {
	            if (item.value == v) {
	                return item;
	            }
	        }
	       throw new IllegalArgumentException(v + "");
	    }
	}
}
